Georgia Income

Author

Julian Gorman

Published

May 03, 2023

# uncomment to run, then recomment it out so you don't run it every time

# census_api_key("APIKEYCODE", install=TRUE)

Here, I chose the list of variables that I wanted to analyze.

myvars <- c(totalpop = "B01003_001",
            medincome = "B19013_001",
            medage = "B01002_001"
)

Here, I pulled the list of counties in Georgia.

Here, I pulled the list of all counties across the U.S.

all_counties_withgeo <- get_acs(geography = "county",
                       variables = c(myvars),
                       output = "wide",
                       geometry = TRUE)
Getting data from the 2017-2021 5-year ACS
Downloading feature geometry from the Census website.  To cache shapefiles for use in future sessions, set `options(tigris_use_cache = TRUE)`.
all_counties_withgeo
Simple feature collection with 3221 features and 8 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -179.1489 ymin: 17.88328 xmax: 179.7785 ymax: 71.36516
Geodetic CRS:  NAD83
First 10 features:
   GEOID                              NAME totalpopE totalpopM medincomeE
1  20161              Riley County, Kansas     72602        NA      53296
2  19159             Ringgold County, Iowa      4739        NA      57700
3  30009            Carbon County, Montana     10488        NA      63178
4  16007           Bear Lake County, Idaho      6327        NA      60337
5  55011         Buffalo County, Wisconsin     13314        NA      61167
6  31185             York County, Nebraska     14164        NA      66337
7  08037            Eagle County, Colorado     55693        NA      91338
8  42129 Westmoreland County, Pennsylvania    355107        NA      64708
9  40079         Le Flore County, Oklahoma     48436        NA      43049
10 48053              Burnet County, Texas     48424        NA      65363
   medincomeM medageE medageM                       geometry
1        2489    25.5     0.1 MULTIPOLYGON (((-96.96095 3...
2        5058    44.3     1.0 MULTIPOLYGON (((-94.47167 4...
3        4261    50.7     0.9 MULTIPOLYGON (((-109.7987 4...
4        7039    38.9     1.1 MULTIPOLYGON (((-111.6345 4...
5        2352    46.5     0.5 MULTIPOLYGON (((-92.08384 4...
6        4128    39.5     1.2 MULTIPOLYGON (((-97.82629 4...
7        4058    37.8     0.8 MULTIPOLYGON (((-107.1137 3...
8        1350    47.1     0.2 MULTIPOLYGON (((-79.90487 4...
9        1869    38.8     0.3 MULTIPOLYGON (((-95.05996 3...
10       4694    44.7     0.3 MULTIPOLYGON (((-98.45924 3...
#remove MOE columns - they all end with "M"
ga_counties_withgeo <- ga_counties_withgeo %>%
  select(-ends_with("M"))

ga_counties_withgeo
Simple feature collection with 159 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -85.60516 ymin: 30.35785 xmax: -80.84038 ymax: 35.00124
Geodetic CRS:  NAD83
First 10 features:
   GEOID                      NAME totalpopE medincomeE medageE
1  13021      Bibb County, Georgia    156711      43862    36.2
2  13049  Charlton County, Georgia     12416      45494    40.6
3  13283  Treutlen County, Georgia      6410      35441    39.9
4  13309   Wheeler County, Georgia      7568      26776    33.6
5  13279    Toombs County, Georgia     26956      42975    37.8
6  13077    Coweta County, Georgia    144928      83486    38.9
7  13153   Houston County, Georgia    161177      70313    35.9
8  13183      Long County, Georgia     16398      52742    33.7
9  13163 Jefferson County, Georgia     15708      42238    40.5
10 13261    Sumter County, Georgia     29690      36687    37.0
                         geometry
1  MULTIPOLYGON (((-83.89192 3...
2  MULTIPOLYGON (((-82.4156 31...
3  MULTIPOLYGON (((-82.74762 3...
4  MULTIPOLYGON (((-82.93976 3...
5  MULTIPOLYGON (((-82.48038 3...
6  MULTIPOLYGON (((-85.0132 33...
7  MULTIPOLYGON (((-83.85685 3...
8  MULTIPOLYGON (((-81.98162 3...
9  MULTIPOLYGON (((-82.66192 3...
10 MULTIPOLYGON (((-84.44381 3...
#remove that trailing "E"
colnames(ga_counties_withgeo) <- sub("E$", "", colnames(ga_counties_withgeo)) # $ means end of string only

ga_counties_withgeo
Simple feature collection with 159 features and 5 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -85.60516 ymin: 30.35785 xmax: -80.84038 ymax: 35.00124
Geodetic CRS:  NAD83
First 10 features:
   GEOID                       NAM totalpop medincome medage
1  13021      Bibb County, Georgia   156711     43862   36.2
2  13049  Charlton County, Georgia    12416     45494   40.6
3  13283  Treutlen County, Georgia     6410     35441   39.9
4  13309   Wheeler County, Georgia     7568     26776   33.6
5  13279    Toombs County, Georgia    26956     42975   37.8
6  13077    Coweta County, Georgia   144928     83486   38.9
7  13153   Houston County, Georgia   161177     70313   35.9
8  13183      Long County, Georgia    16398     52742   33.7
9  13163 Jefferson County, Georgia    15708     42238   40.5
10 13261    Sumter County, Georgia    29690     36687   37.0
                         geometry
1  MULTIPOLYGON (((-83.89192 3...
2  MULTIPOLYGON (((-82.4156 31...
3  MULTIPOLYGON (((-82.74762 3...
4  MULTIPOLYGON (((-82.93976 3...
5  MULTIPOLYGON (((-82.48038 3...
6  MULTIPOLYGON (((-85.0132 33...
7  MULTIPOLYGON (((-83.85685 3...
8  MULTIPOLYGON (((-81.98162 3...
9  MULTIPOLYGON (((-82.66192 3...
10 MULTIPOLYGON (((-84.44381 3...

Here I mapped Georgia counties by income, using mapview.

mapview(ga_counties_withgeo, zcol = "medincome")

Here I changed the colors of the map to be lighter using color brewer.

mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.

In the next two steps, I changed the darkness of the background.

mapviewOptions("basemaps.color.shuffle" = FALSE)
# this changed the maps background from black to white
mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.

In the next two steps, I built two maps, side-by-side, with one displaying Georgia’s income demographics and the other displaying age demographics.

map_income <- mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.
map_age <- mapview(ga_counties_withgeo, zcol = "medage", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1)
Warning: Found less unique colors (9) than unique zcol values (97)! 
Interpolating color vector to match number of zcol values.
sync(map_income, map_age)

In the following step, I added a slider feature to the maps.

map_income | map_age

in the following step, I removed the legend blocking parts of the map.

mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1,
         legend = FALSE, 
         label = FALSE, 
         popup = FALSE)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.

In the following step, I developed labels that would display as hover text.

mylabel <- glue::glue("{ga_counties_withgeo$NAM} {ga_counties_withgeo$medincome}")


mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1,
         label = mylabel)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.

In the following three steps, I made the popups ineractive, only displaying the full values when clicked on.

mypopup <- glue::glue("<strong>{ga_counties_withgeo$NAM}</strong><br />
                      Total Population: {ga_counties_withgeo$totalpop}<br />
                      Median Income: {ga_counties_withgeo$medincome}") %>% 
  lapply(htmltools::HTML)

# mylabel <- glue::glue("{all_data$State} {all_data$PctChange10_20}%") %>%
#   lapply(htmltools::HTML)
head(mypopup)
[[1]]
<strong>Bibb County, Georgia</strong><br />
Total Population: 156711<br />
Median Income: 43862

[[2]]
<strong>Charlton County, Georgia</strong><br />
Total Population: 12416<br />
Median Income: 45494

[[3]]
<strong>Treutlen County, Georgia</strong><br />
Total Population: 6410<br />
Median Income: 35441

[[4]]
<strong>Wheeler County, Georgia</strong><br />
Total Population: 7568<br />
Median Income: 26776

[[5]]
<strong>Toombs County, Georgia</strong><br />
Total Population: 26956<br />
Median Income: 42975

[[6]]
<strong>Coweta County, Georgia</strong><br />
Total Population: 144928<br />
Median Income: 83486
mapview(ga_counties_withgeo, zcol = "medincome", 
         col.regions = RColorBrewer::brewer.pal(9, "Greens"), 
         alpha.regions = 1,
         popup = mypopup)
Warning: Found less unique colors (9) than unique zcol values (159)! 
Interpolating color vector to match number of zcol values.